
//todo
// 假设有k个人质和k个绑匪围成一圈。人质的编号从1到k，绑匪的编号从k+1到2k。
// 从编号1开始，每次从其中选出第m个人(隔m-1选出一人)出列。
// 希望求出m的最小值，使得最先出列的k个人都是绑匪，即都是编号从k+1到2k的人。
#include "iostream"
#include "vector"
#include "unordered_map"
#include "algorithm"

int main() {

    //m最大木板数
    //c牛的数量
    int m,c;
    while (std::cin >> m>>c ) {
//        int bar_len=c;
        int bar_cnt=1;
        std::vector<int> buf(c);
        for(int i=0;i<c;i++){
            std::cin>>buf[i];
        }
        std::sort(buf.begin(),buf.end());

        int bar_len=buf[buf.size()-1]-buf[0]+1;
        std::vector<int> dis(c-1);
        for(int i=0;i<buf.size()-1;i++){
            dis[i]=buf[i+1]-buf[i]-1;
        }
        std::sort(dis.begin(),dis.end());
        while(bar_cnt<m&&dis.size()>0){
            bar_len-=dis[dis.size()-1];
            dis.pop_back();
            bar_cnt++;
        }
        printf("%d\n",bar_len);
    }
//    while(1){}
    return 0;
}